package com.persistence.dao;

import java.util.List;
import java.util.Map;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.orm.jpa.support.JpaDaoSupport;
import org.springframework.stereotype.Repository;

import com.common.CoreDao;
import com.common.PaginatedResult;
import com.persistence.TFootballTeam;

//@Repository("teamDao")
public interface TeamDao extends CoreDao<TFootballTeam>{

//	@PersistenceContext
//	public void setManager(EntityManager em) {
//		this.setEntityManager(em);
//	}
//
//	private final Class<TFootballTeam> persistentClass = TFootballTeam.class;
//	private static final Log log = LogFactory.getLog(TeamDao.class);
//	
//	
//	@Override
//	public TFootballTeam insert(TFootballTeam transientInstance) {
//		log.debug("inserting " + this.persistentClass.getName() + " instance");
//		try {
//			TFootballTeam result = getJpaTemplate().merge(transientInstance);
////			this.getJpaTemplate().getEntityManager().persist(transientInstance);
//			log.debug("insert successful");
//			return result;
//		} catch (RuntimeException re) {
//			log.error("insert failed", re);
//			throw re;
//		}
//	}
//
//	@Override
//	public TFootballTeam update(TFootballTeam detachedInstance) {
//		log.debug("updating " + this.persistentClass.getName() + " instance");
//		try {
//			TFootballTeam result = getJpaTemplate().merge(detachedInstance);
//			log.debug("update successful");
//			return result;
//		} catch (RuntimeException re) {
//			log.error("update failed", re);
//			throw re;
//		}
//	}
//
//	@Override
//	public Boolean remove(TFootballTeam persistentInstance) {
//		log.debug("deleting " + this.persistentClass.getName() + " instance");
//		try {
//			TFootballTeam result = getJpaTemplate().merge(persistentInstance);
//			getJpaTemplate().remove(result);
//			log.debug("delete successful");
//			return true;
//		} catch (RuntimeException re) {
//			log.error("delete failed", re);
//			throw re;
//		}
//	}
//
//	@Override
//	public Boolean removeList(List<TFootballTeam> list) {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public TFootballTeam findById(Integer id) {
//		log.debug("getting " + this.persistentClass.getName()
//				+ " instance with id: " + id.toString());
//		try {
//			TFootballTeam instance = getJpaTemplate().find(this.persistentClass, id);
//			return instance;
//		} catch (RuntimeException re) {
//			log.error("find " + this.persistentClass.getName()
//					+ " by id failed", re);
//			throw re;
//		}
//	}
//
//	@Override
//	public List<TFootballTeam> findByProperty(String propertyName,
//			Object value, int... rowStartIdxAndCount) {
//		log.debug("finding " + this.persistentClass.getName()
//				+ " instance with property: " + propertyName + ", value: "
//				+ value);
//		try {
//			String queryString = "from " + this.persistentClass.getName()
//					+ " as model where model." + propertyName + "= :value";
//			Query query = getJpaTemplate().getEntityManager().createQuery(
//					queryString);
//			query.setParameter("value", value);
//			if (rowStartIdxAndCount != null && rowStartIdxAndCount.length > 0) {
//				int rowStartIdx = Math.max(0, rowStartIdxAndCount[0]);
//				if (rowStartIdx > 0) {
//					query.setFirstResult(rowStartIdx);
//				}
//				if (rowStartIdxAndCount.length > 1) {
//					int rowCount = Math.max(0, rowStartIdxAndCount[1]);
//					if (rowCount > 0) {
//						query.setMaxResults(rowCount);
//					}
//				}
//			}
//			// return getJpaTemplate().find(queryString, value);
//			return query.getResultList();
//		} catch (RuntimeException re) {
//			log.error("find " + this.persistentClass.getName()
//					+ " by property name failed", re);
//			throw re;
//		}
//	}
//
//	@SuppressWarnings("unchecked")
//	@Override
//	public List<TFootballTeam> findAll(int... rowStartIdxAndCount) {
//		log.debug("finding all " + this.persistentClass.getName()
//				+ " instances");
//		try {
//			String sqlString = "select model from "
//					+ this.persistentClass.getName() + " as model";
//			Query query = getJpaTemplate().getEntityManager().createQuery(
//					sqlString);
//			if (rowStartIdxAndCount != null && rowStartIdxAndCount.length > 0) {
//				int rowStartIdx = Math.max(0, rowStartIdxAndCount[0]);
//				if (rowStartIdx > 0) {
//					query.setFirstResult(rowStartIdx);
//				}
//
//				if (rowStartIdxAndCount.length > 1) {
//					int rowCount = Math.max(0, rowStartIdxAndCount[1]);
//					if (rowCount > 0) {
//						query.setMaxResults(rowCount);
//					}
//				}
//			}
//			return query.getResultList();
//		} catch (RuntimeException re) {
//			log.error("find all " + this.persistentClass.getName() + " failed",
//					re);
//			throw re;
//		}
//	}
//
//	@Override
//	public List<TFootballTeam> findLikeProperty(String propertyName,
//			Object value, int... rowStartIdxAndCount) {
//		log.debug("finding " + this.persistentClass.getName()
//				+ " instance with property: " + propertyName + ", value: "
//				+ value);
//		try {
//			String queryString = "from " + this.persistentClass.getName()
//					+ " as model where model." + propertyName + " like '%"
//					+ value + "%'";
//			Query query = getJpaTemplate().getEntityManager().createQuery(
//					queryString);
//			if (rowStartIdxAndCount != null && rowStartIdxAndCount.length > 0) {
//				int rowStartIdx = Math.max(0, rowStartIdxAndCount[0]);
//				if (rowStartIdx > 0) {
//					query.setFirstResult(rowStartIdx);
//				}
//				if (rowStartIdxAndCount.length > 1) {
//					int rowCount = Math.max(0, rowStartIdxAndCount[1]);
//					if (rowCount > 0) {
//						query.setMaxResults(rowCount);
//					}
//				}
//			}
//			// return getJpaTemplate().find(queryString, value);
//			return query.getResultList();
//		} catch (RuntimeException re) {
//			log.error("find " + this.persistentClass.getName()
//					+ " by property name failed", re);
//			throw re;
//		}
//	}
//
//	@Override
//	public List<TFootballTeam> findLikeMapOfProperties(
//			Map<String, Object> propertiesMap, int... rowStartIdxAndCount) {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public List<TFootballTeam> findByMapOfProperties(
//			Map<String, Object> propertiesMap, int... rowStartIdxAndCount) {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public Integer countAll() {
//		log.debug("count all " + this.persistentClass.getName() + " instances");
//
//		try {
//			String queryString = "select count(*) from "
//					+ this.persistentClass.getName() + " as model";
//			Query query = getJpaTemplate().getEntityManager().createQuery(
//					queryString);
//
//			return Integer.valueOf(query.getSingleResult().toString());
//		} catch (RuntimeException re) {
//			log.error("count all failed", re);
//			throw re;
//		}
//	}
//
//	@Override
//	public Integer countLikeProperty(String propertyName, Object value) {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public Integer countByProperty(String propertyName, Object value) {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public Integer countLikeMapOfProperties(Map<String, Object> propertiesMap) {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public Integer countByMapOfProperties(Map<String, Object> propertiesMap) {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public PaginatedResult<TFootballTeam> paginateLikeMapOfProperties(
//			Map<String, Object> propertiesMap, int... rowStartIdxAndCount) {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public PaginatedResult<TFootballTeam> paginateAll(
//			int... rowStartIdxAndCount) {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public PaginatedResult<TFootballTeam> paginateByMapOfProperties(
//			Map<String, Object> propertiesMap, int... rowStartIdxAndCount) {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public List<TFootballTeam> findByExample(TFootballTeam instance,
//			int... rowStartIdxAndCount) {
//		// TODO Auto-generated method stub
//		return null;
//	}

}
